Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • View renderedDownload


vendor/rns_over_http/README-RU.md v4.8.1 (f6cc7b83) Text, 6.71 KB

Tc9d1d9# **RNS-over-HTTP**

Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.

Границы пакетов на HTTP-теле используют то же упрощённое HDLC-фреймирование, что и Ta5d6ff`PipeInterface` Reticulum, поэтому несколько пакетов могут передаваться в одном теле запроса или ответа без слияния.

[Tff7b72Не-GitHub-зеркало](Te6edf3https://lavaforge.org/Ivan/RNS-over-HTTP). Кроме того, файлы проекта доступны в сети Reticulum по адресу Ta5d6ff`RNS-over-HTTP`.

Tc9d1d9## **Обзор**

RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель:

Tff7b72* **Сервер**: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы.
Tff7b72* **Клиент**: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет.

Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность.

Tc9d1d9## **Как это работает**

Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling:

Tff7b721. Клиент отправляет HTTP POST на сервер с ожидающими HDLC-фреймами в теле запроса.
Tff7b722. Сервер декодирует входящие пакеты для Reticulum и сразу возвращает исходящую очередь (тоже в HDLC) в теле ответа.
Tff7b723. Клиент принимает ответ, декодирует фреймы и передаёт пакеты в Reticulum.
Tff7b724. После настраиваемого интервала опроса клиент повторяет цикл.

Tc9d1d9## **Особенности**

Tff7b72* **Обход файрволов и DPI**: Туннелирует трафик через стандартные порты HTTP/S (80/443).
Tff7b72* **Двунаправленная связь**: Полнодуплексная передача данных.
Tff7b72* **Совместимое с Pipe фреймирование**: HDLC FLAG/ESC как у Ta5d6ff`PipeInterface`.
Tff7b72* **Простая настройка**: Python, Ta5d6ff`httpx`, Hypercorn/aioquic для HTTP/2–3 и Reticulum (Ta5d6ff`rns`).
Tff7b72* **Надёжность**: Повторное подключение с экспоненциальной задержкой.
Tff7b72* **Гибкость**: Настраиваемые MTU и интервал опроса.
Tff7b72* **Совместимость с прокси**: Caddy, Nginx и аналоги.
Tff7b72* **Повторное использование соединений**: keep-alive / мультиплексирование.
Tff7b72* **HTTP/1.1, HTTP/2 и HTTP/3**: Ta5d6ff`http_version = 1|2|3` (по умолчанию Ta5d6ff`1`).

Tc9d1d9## **Начало работы**

Tc9d1d9### **Требования**

Tff7b72* Python 3.10 или новее
Tff7b72* [Tff7b72Poetry](Te6edf3https://python-poetry.org/docs/#installation)

Tc9d1d9### **Установка**

Tff7b721. **Установите зависимости через Poetry** (из корня репозитория):

Ta5d6ff ```Ta5d6ffbash
poetry install
Ta5d6ff ```

Tff7b722. **Установите пользовательский интерфейс:** скопируйте Ta5d6ff`HTTPInterface.py` в каталог интерфейсов Reticulum, например Ta5d6ff`~/.reticulum/interfaces/`.

Tc9d1d9### **Тесты**

Ta5d6ff```Ta5d6ffbash
poetry run pytest -m Ta5d6ff"not live"
poetry run pytest -m live
Ta5d6ff```

Tc9d1d9## **Конфигурация**

Добавьте блок интерфейса в Ta5d6ff`~/.reticulum/config` на сервере и на клиенте. Поле Ta5d6ff`type` должно совпадать с именем модуля (Ta5d6ff`HTTPInterface`).

Tc9d1d9### **Конфигурация сервера**

Ta5d6ff```Ta5d6ffini
Tff7b72[[HTTP Server Interface]]
Te6edf3type Tff7b72= Ta5d6ffHTTPInterface
Te6edf3enabled Tff7b72= Ta5d6fftrue
Te6edf3mode Tff7b72= Ta5d6ffserver
Te6edf3listen_host Tff7b72= Ta5d6ff0.0.0.0
Te6edf3listen_port Tff7b72= Ta5d6ff8080
Te6edf3mtu Tff7b72= Ta5d6ff4096
Te6edf3check_user_agent Tff7b72= Ta5d6fftrue
Te6edf3user_agent Tff7b72= Ta5d6ffRNS-HTTP-Tunnel/1.0
Ta5d6ff```

Tc9d1d9### **Конфигурация клиента**

Ta5d6ff```Ta5d6ffini
Tff7b72[[HTTP Client Interface]]
Te6edf3type Tff7b72= Ta5d6ffHTTPInterface
Te6edf3enabled Tff7b72= Ta5d6fftrue
Te6edf3mode Tff7b72= Ta5d6ffclient
Te6edf3server_url Tff7b72= Ta5d6ffhttp://your-server-ip-or-domain:8080/
Te6edf3poll_interval Tff7b72= Ta5d6ff0.1
Te6edf3mtu Tff7b72= Ta5d6ff4096
Te6edf3user_agent Tff7b72= Ta5d6ffRNS-HTTP-Tunnel/1.0
Ta5d6ff```

Tc9d1d9## **Параметры конфигурации**

Tc9d1d9### Общие

Tff7b72* Ta5d6ff`mtu`: максимальный размер пакета в байтах (по умолчанию Ta5d6ff`4096`)
Tff7b72* Ta5d6ff`user_agent`: строка User-Agent (по умолчанию Ta5d6ff`RNS-HTTP-Tunnel/1.0`)

Tc9d1d9### Режим сервера

Tff7b72* Ta5d6ff`mode = server`
Tff7b72* Ta5d6ff`listen_host` (по умолчанию Ta5d6ff`0.0.0.0`)
Tff7b72* Ta5d6ff`listen_port` (по умолчанию Ta5d6ff`8080`)
Tff7b72* Ta5d6ff`check_user_agent` (по умолчанию Ta5d6ff`true`)
Tff7b72* Ta5d6ff`serve_html_page` / Ta5d6ff`html_file_path`: необязательная HTML-страница на GET Ta5d6ff`/`

Tc9d1d9### Режим клиента

Tff7b72* Ta5d6ff`mode = client`
Tff7b72* Ta5d6ff`server_url` (обязателен)
Tff7b72* Ta5d6ff`poll_interval` (по умолчанию Ta5d6ff`0.1`)
Tff7b72* Ta5d6ff`http_version = 1|2|3` (по умолчанию Ta5d6ff`1`)
Tff7b72* для Ta5d6ff`2` и Ta5d6ff`3`: Ta5d6ff`https://`, на сервере Ta5d6ff`tls_certfile` / Ta5d6ff`tls_keyfile`
Tff7b72* Ta5d6ff`tls_verify` / Ta5d6ff`tls_ca_certs` на клиенте
Tff7b72* Ta5d6ff`pool_connections` / Ta5d6ff`pool_maxsize` / Ta5d6ff`keepalive_timeout`

Tc9d1d9## **Обратный прокси (пример Caddy)**

Ta5d6ff```Ta5d6ffcaddy
example.yourdomain.com Tb4b4b4{
Tff7b72reverse_proxy 127.0.0.1:8080
Tff7b72header Tb4b4b4{
-Server
X-Content-Type-Options nosniff
Tb4b4b4}
Tb4b4b4}
Ta5d6ff```

Tc9d1d9## **Безопасность**

Tff7b72* Используйте HTTPS там, где возможно.
Tff7b72* По умолчанию сервер проверяет User-Agent. Задайте одинаковый Ta5d6ff`user_agent` на обеих сторонах или отключите проверку через Ta5d6ff`check_user_agent = false`.

Tc9d1d9## **Лицензия**

Проект распространяется под [Tff7b72лицензией MIT](Te6edf3LICENSE).


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────